home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / docs / mags / saku17.lha / Teksti / Tekoelämä.txt < prev    next >
Text File  |  1996-03-01  |  13KB  |  363 lines

  1. 5
  2. 1
  3. 10 tekoelämä1.IFF 0 0
  4. 11 tekoelämä2.IFF 0 0*
  5.  
  6. {A                      Elämää tietokoneessa?
  7. {A                      ---------------------
  8.  
  9. {7                          Petri Keckman
  10.  
  11. {c                Esimerkkikuvat ovat sivuilla 11 & 12
  12.  
  13.  
  14. Mitä  on  elämä?  Miten  se  kehittyy?  Miten mieli toimii? Ovatko molemmat vain
  15. materian liikettä?
  16.  
  17. Vastaavanlaiset  kysymykset  ovat  varmasti askarruttaneet ihmisapinan mieltä jo
  18. siitä  lähtien,  kun saimme ensimmäiset orastavat tuntemukset siitä, että olemme
  19. jotain  mikä  on olemassa: jo vuosimiljoonia ennen Platonia (synt. 427 eKr.) tai
  20. Descartesia ja "Cogito, ergo sum":ia 1600-luvulla.
  21.  
  22. Tämän    päivän   tekoelämän   ja   tekoälyn   tutkijat   ovat   tuomassa   omaa
  23. vastauksentynkäänsä näihin kysymyksiin. Asiaa pohdittiin aivan vakavasti(?) myös
  24. Tiede  2000  -lehden  (5/95)  artikkelissa  "Luomisen  kahdeksas  päivä?", jossa
  25. todetaan:   "Tekoelämän   tutkimus   on   biologiaa   elektronisessa   muodossa.
  26. Tietokoneiden  avulla halutaan paljastaa elämän syvin olemus - ja kehittää uutta
  27. elämää."
  28.  
  29. Minua   ovat   aina   puistattattaneet   puheet   tietokoneella   aikaansaadusta
  30. tekoelämästä.
  31.  
  32.  
  33.  
  34.  
  35.  
  36. "Tieteellisellä  toiminnalla"  on  kulttuurissamme  hyvin  suuri arvovalta ja se
  37. siirtyy  myös  artikkeleille,  joita julkaistaan Tiede 2000 -lehdessä. Asemaansa
  38. tiede   on   aikoinaan   päässyt   syrjäyttämällä   uskonnolliset  ja  myyttiset
  39. maailmankuvat.   Tiede  nähdään  toimintana,  joka  tuottaa  "tietoa",  joka  on
  40. varmemmalla   pohjalla   kuin  muut,  esimerkiksi  uskonnolliset,  maagiset  tai
  41. taiteeseen  perustuvat  ihmis-  ja  elämänkäsitykset.  Tiede aikoinaan syrjäytti
  42. uskonnon kuitenkin lähinnä vain materian lainalaisuuksien tutkimisessa.
  43.  
  44. Ja  nyt  siis  "tieteellisesti"  pohditaan vakavasti, ovatko ne prosessit, joita
  45. tietokoneella  aikaansaadaan  samaa  kuin elämä?! Kaikki tietokoneen toiminta on
  46. palautettavissa  siihen, että jos jotkin sähkövaraukset (syötebitit) ovat vaikka
  47. 101011  ja  jotkin  bitit  (ohjelma)  ovat  101001,  niin ne määräävät tiettyjen
  48. sääntöjen  perusteella  (prosessorin  toiminta),  että  tulosteeksi tulee jotkin
  49. bitit,  esimerkiksi  1101010. Tämän tulosteen annetaan sitten aiheuttaa tiettyjä
  50. aisteilla  havaittavissa  olevia ilmiöitä näyttöpäätteessä, robotin käsivarressa
  51. tai muussa tulostinlaitteessa. Siinä se on tasan koko homma eikä mitään muuta.
  52.  
  53. Tietokone  ei  käsittele  edes numeroita eikä laske. Sen voidaan tulkita tekevän
  54. niin  vasta sen jälkeen, kun olemassa elävä ja tietävä olento, joka antaa niille
  55. sähkövarauksille  sellaiset  tulkinnat,  että ne ovat joitain sellaisia tietomme
  56. kohteena  olevia  olioita,  joita  kutsumme numeroiksi. Yhtä hyvin voisi väittää
  57. melkein  minkä  tahansa  fyysisen  materian  toiminnan  kuvaavan "elämän syvintä
  58. olemusta".  Annamme  vain  näille  havaintokentässämme tapahtuville tapahtumille
  59. sellaisen  semanttisen  tulkinnan:  muodostamme  tietyn  kielen, jossa tietyillä
  60. materiaalisilla tapahtumilla ovat tietyt tiedolliset vastineet mielessämme.
  61.  
  62. Tekoelämää  tutkivat  ovat  pyrkineet  luomaan laskennallisia prosesseja, joiden
  63. mahdollista  elävyyttä  he  aivan  vakavissaan  pohtivat. Tällaisia ovat mm. ns.
  64. soluautomaatit.   Niissä  noudatetaan  tiettyjä  yksinkertaisia  algoritmillisia
  65. periaatteita,   joiden  tuloksena  syntyy  näyttöpäätteelle  tulosteita  (joiden
  66. toiminta kuvaa elämän syvintä olemusta! Hah hah!). Esimerkiksi:
  67.  
  68. 1) Jokainen kuvaruudun piste (solu), jolla on kaksi tai kolme elävää
  69.    naapuria, selviää hengissä seuraavalle sukupolvelle.
  70.  
  71. 2) Jokainen solu, jolla on nolla tai yksi naapuria "kuolee" (yksinäisyyteen)
  72.    (yksinäisyyteen), ja jokainen piste jolla on neljä tai useampia naapureita
  73.    kuolee (liikakansoitukseen).
  74.  
  75. 3) Jokainen kuollut solu, jolla on tasan kolme elävää naapuria synnyttää
  76.    uuden solun.
  77.  
  78. Samat periaatteet voidaan sanoa myös toisin:
  79.  
  80. 1) Jos pikseli ei ole päällä niin se tulee päälle, jos sillä on tasan kolme
  81.    päällä olevaa viereistä pikseliä.
  82.  
  83. 2) Jos pikseli on päällä, niin se sammuu, jos sillä on nolla tai yksi päällä
  84.    olevaa viereistä pikseliä. Samoin se sammuu, jos vieressä on useampia kuin
  85.    kolme pikseliä päällä.
  86.  
  87. Näillä   yksinkertaisilla   "syntymän",   "hengissä  säilymisen"  ja  "kuoleman"
  88. säännöillä väitetään siis saatavan aikaiseksi jotain sellaista, josta pohditaan,
  89. onko  se  elämää.  Pohtisivat  edes  vain  sitä, kuvastavatko ne jollain tavalla
  90. joitain  meidän  elävien ihmisten tietoja ja käsityksiä evoluution prosesseista,
  91. mutta  kun minä olen käsittänyt, että he aivan vakavissaan pohtivat sitä, ovatko
  92. ne  eläviä.  Suutarit  pysykööt  lestissään  työajalla ja pohtikoot vapaa-ajalla
  93. kaikenkattavia  selityksiä  elämän  syvimmästä olemuksesta, joka on meille täysi
  94. mysteeri, vaikka me niin kiihkeästi haluaisimmekin väittää ymmärtävämme sitä.
  95.  
  96. Mielemme  on  aina  aikansa  vanki.  Nyt  kun  tietokoneet ovat valtaamassa alaa
  97. elämässämme   ja  mielessämme,  pyrimme  helposti  projisoimaan  sen  käsitteitä
  98. elämään.  Taiteilijat, uskovaiset, humanistit ja psykologit näkevät elämän aivan
  99. toisin.
  100.  
  101. Alla    on    AMOS-ohjelma,   joka   mallintaa   ylläselitettyä   yksinkertaista
  102. soluautomaattia  - ja elämän perimmäisintä luonnetta.  Esimerkkiajossa, josta on
  103. kuva sivulla 11  laitoin alkusyötteeksi seuraavanlaisen pistekuvion:
  104.  
  105. {c             xxx
  106. {c            x   x
  107. {c           x     x   ( Tästä on esimerkkikuva sivulla 11. Oikotie: J-näppäin )
  108. {c            x   x
  109. {c             xxx
  110.  
  111. Koska  alkukuva  oli symmetrinen, aiheutti se luonnollisesti myöskin symmetristä
  112. elämää.  Pienikin  muutos  alkuparametreihin  (yhden pisteen poisto) voi muuttaa
  113. tätä tekoelämää täysin. Suuri osa muodoista päättyy tilanteeseen, josta elämä ei
  114. enää  kehity,  vaan  peräkkäisistä  tiloista tulee samanlaiset. Esimerkki ajossa
  115. elämä  kiinnittyi  stabiiliin  tilaan  14.  sukupolvessa.  Yhden  pisteen poisto
  116. (kuva2)  aiheutti  sen,  että  elämä  lähti  laajenemaan.  Kun tästä alkutilasta
  117. poistin vielä yhden pisteen, jolloin alkutilanne oli tällainen,
  118.  
  119. {c             xxx
  120. {c                x
  121. {c           x     x   ( Tästä on esimerkkikuva sivulla 12. )
  122. {c            x   x
  123. {c             xxx
  124.  
  125. hävisi elämä kokonaan sukupolvessa 16.
  126.  
  127. Ne,  joilla  on käytössä AMOS-tulkki tai kääntäjä voivat tutkia ohjelmalla muita
  128. tapauksia.   Talleta   blokki   teksinkäsittelyohjelmallasi,   lataa   se  (Load
  129. ASCII-file)  AMOS-tulkkiisi  ja  tutki  "elämää".  Ohjelma on melko hidas, koska
  130. käytän  siinä  taulukoita  solujen  tilanteen  tallettamiseen.  Joka tilanteessa
  131. täytyy  jokainen  solu  ja  sen  kahdeksan  naapuria  tutkia  erikseen.  Lisäksi
  132. seuraavaan    tilanteeseen    mennessä    kopioidaan   koko   taulukko   uudeksi
  133. lähtötaulukoksi,  jonka perusteella lasketaan taas seuraava tilanne. C-kieltä ja
  134. dynaamisia   muuttujia  käyttäen  ohjelmasta  olisi  tullut  monta  kertaluokkaa
  135. nopeampi - mutta evoluutiohan on hidasta.
  136.  
  137. Mikäli  artikkeli  aiheutti mietteitä ja käytössäsi on modeemi, voit kommentoida
  138. MBnetissä tai Epsilon Indissä, joissa silloin tällöin käyn. Toki voinet lähettää
  139. mietteitäsi  Sakuunkin:  jos joku nykyajan keinotodellisuus- ja tietokonefriikki
  140. on  tosissaan  sitä  mieltä,  että  elämä ja ihmisen sielun toiminta ovat jotain
  141. senkaltaista,   että   sitä   voidaan   mallintaa   -  tai  jopa  aikaansaada  -
  142. tietokoneella, niin olen valmis riitelemään aiheesta.
  143.  
  144. {9Rem *** Petri Keckman 1996 
  145. {9Rem *** Soluautomaatin elämää AMOSilla  
  146. {9Rem Ohjelma tuottaa tekoelämää noudattamalla yksinkertaisia  
  147. {9Rem periaatteita:
  148. {9Rem 1) jos pikseli ei ole päällä niin se tulee päälle, jos sillä on 
  149. {9Rem    tasan kolme päällä olevaa viereistä pikseliä.
  150. {9Rem 2) Jos pikseli on päällä, niin se sammuu, jos sillä on molla tai yksi
  151. {9Rem    päällä olevaa viereistä pikseliä. Samoin se sammuu, jos vieressä on
  152. {9Rem    useampia kuin kolme päällä. 
  153. {9Rem Ohjelma piirtää vaiheista pieniä kuvia ja piirtää vanhojen päälle, kun
  154. {9Rem kuvaruutu täyttyy.   
  155. {9
  156. {9MX#=640
  157. {9MY#=256
  158. {9Screen Open 0,MX#,MY#,4,Hires
  159. {9Flash Off : Curs Off : Cls 0
  160. {9Colour 0,$0 : Colour 1,$F0 : Colour 2,$FF0 : Colour 3,$F00
  161. {9
  162. {9Rem Halutessasi voit muuttaa muuttujien RX, RY, XKPL, YKPL ja   
  163. {9Rem alkukuvan koordinaattien arvoja Data-lauseesta. 
  164. {9
  165. {9RX=4 : RY=4 : Rem "sarjakuvaruutujen" lukumäärä, tässä 4*4  
  166. {9XKPL=16 : Rem Sarjakuvaruudussa 16*16 ruudukko soluille  
  167. {9YKPL=16
  168. {9KPL=12 : Rem Elämän alkukuvapisteitten lukumäärä  
  169. {9Rem Elämän alkusolujen koordinaatit XKPL*YKPL ruudukossa   
  170. {9Data 6,6,7,6,8,6,9,7,10,8,9,9,8,10,7,10,6,10,5,9,4,8,5,7
  171. {9
  172. {9Rem Jos muutat KPL-määrää suuremmaksi, niin joudut tietysti lisäämään
  173. {9Rem myöskin alkupisteitä, joiden koordinaatit ovat väliltä 1..XKPL
  174. {9Rem ja 1..YKPL.
  175. {9Rem Jos elämä kehittyessään ei mahdu sille asetettuihin raameihin,
  176. {9Rem voit kasvattaa XKPL- ja YKPL-muuttujien arvoja. Silloin joudut
  177. {9Rem myös muuttamaan alkukoordinaattien arvoja, jos haluat alkukuvan
  178. {9Rem keskelle "sarjakuvaruutua" samoilla data-arvoilla. Helpommmin se
  179. {9Rem käy, kun muutat riviltä 63 ja 64 skaalaustekijää. Jos esim. suurennat
  180. {9Rem ruudukkoa 10:llä, niin muuta skaalaustekijä 10/2=5, ja alkukuva on
  181. {9Rem edelleen keskellä eikä sinun tarvitse muuttaa kaikkia data-arvoja.
  182. {9Rem Pienikin muutos voi saada elämässä suuria muutoksia aikaiseksi:
  183. {9Rem esim. arvoilla KPL=11, XKPL=25, YKPL=25, RX=4, RY=4 elämä ei lopu
  184. {9Rem koskaan, mutta jos tästä poistaa vain yhden pisteen (KPL=10) käyttäen 
  185. {9Rem samoja Data-lauseen arvoja, niin se häviää kokonaan sukupolvessa 16. 
  186. {9Rem Aloitetaan piirtämällä raamit elämälle:
  187. {9
  188. {9MARG=40 : Rem Alasjätettävä marginaali 
  189. {9LEVEYS#=(MX#-1)/RX
  190. {9KORKEUS#=(MY#-MARG)/RY
  191. {9Ink 3
  192. {9For I=1 To RX : For J=1 To RY
  193. {9Box LEVEYS#*(I-1),KORKEUS#*(J-1) To I*LEVEYS#,J*KORKEUS#
  194. {9Next : Next : Draw MX#,0 To MX#,MY#
  195. {9Locate 20,28 : Paper 0 : Pen 2
  196. {9Print "ELÄMÄN SYVIN OLEMUS TEKOELÄMÄN TUTKIJOIDEN MIELESTÄ"
  197. {9
  198. {9Rem SOLUT0-taulukon avulla lasketaan seuraava SOLUT1-taulukko
  199. {9Dim SOLUT0(XKPL+1,YKPL+1),SOLUT1(XKPL+1,YKPL+1)
  200. {9
  201. {9Rem tapetaan aluksi kaikki solut (arvo 0)
  202. {9For I=0 To XKPL+1 : For J=0 To YKPL+1
  203. {9   SOLUT0(I,J)=0 : SOLUT1(I,J)=0
  204. {9Next : Next 
  205. {9LX#=LEVEYS#/XKPL : Rem yhden pisteen (solun) leveys 
  206. {9LY#=KORKEUS#/YKPL
  207. {9If LX#<2 or LY#<2
  208. {9  Print "Liian pieneksi meni. Pienennä muuttujia RX,RY tai XKPL,YKPL"
  209. {9  Stop 
  210. {9End If 
  211. {9
  212. {9Rem Asetetaan elämän spontaani alkusynty.  
  213. {9X0#=0 : Rem sarjakuvaruudun vasen yläkulma alussa
  214. {9Y0#=0
  215. {9For SOLU=1 To KPL
  216. {9  Read I,J
  217. {9  I=I+0 : Rem skaalaustekijä (tässä 0)  
  218. {9  J=J+0 : Rem skaalaustekijä (tässä 0)
  219. {9  SOLUT0(I,J)=1 : Rem solu elää=1, kuollut=0 
  220. {9  Ink 1 : Gosub 999
  221. {9Next 
  222. {9
  223. {9KIERROS=2
  224. {9Repeat : Rem Pääsilmukka, jossa pyöritään kunnes elämä ei enää kehity
  225. {9  Locate 0,28 : Paper 0 : Ink 3
  226. {9  Print "Sukupolvi: ";KIERROS : Add KIERROS,1
  227. {9  Rem lasketaan seuraavan sarjakuvaruudun vasen yläkulma   
  228. {9  X0#=X0#+LEVEYS# : If X0#>MX#-LEVEYS#
  229. {9                      X0#=0 : Y0#=Y0#+KORKEUS#
  230. {9                      If Y0#>MY#-KORKEUS#-MARG : Y0#=0 : End If
  231. {9                    End If 
  232. {9  Rem tyhjennetään se ensin
  233. {9  Ink 0 : Bar X0#+1,Y0#+1 To X0#+LEVEYS#-1,Y0#+KORKEUS#-1
  234. {9  Rem ja aletaan laskea soluille arvoja 
  235. {9  For I=1 To XKPL
  236. {9    For J=1 To YKPL
  237. {9      ELAA=SOLUT0(I,J)
  238. {9      KPL=0 : Rem Lasketaan elävät naapurisolut
  239. {9      Rem ei lasketa solua itse sen eläväksi naapuriksi:
  240. {9      If ELAA=1 : KPL=-1 : End If 
  241. {9      For DI=-1 To 1
  242. {9        For DJ=-1 To 1
  243. {9          If SOLUT0(I+DI,J+DJ)=1 : Add KPL,1 : End If 
  244. {9        Next DJ
  245. {9      Next DI
  246. {9      Rem tässä on varsinainen tekoelämän generaattori
  247. {9      If ELAA=1 and(KPL=2 or KPL=3)
  248. {9        SOLUT1(I,J)=1
  249. {9        Ink 1 : Gosub 999 : End If 
  250. {9      If ELAA=1 and(KPL=0 or KPL=1 or KPL>3)
  251. {9        SOLUT1(I,J)=0
  252. {9        Ink 0 : Gosub 999 : End If 
  253. {9      If ELAA=0 and(KPL=3)
  254. {9        SOLUT1(I,J)=1
  255. {9        Ink 1 : Gosub 999 : End If 
  256. {9    Next 
  257. {9  Next 
  258. {9  Rem tutkitaan samojen solujen lukumäärä  
  259. {9  Rem ja siirretään SOLUT1:n alkiot SOLUT0:n alkioiksi   
  260. {9  SAMOJA=0
  261. {9  For I=1 To XKPL : For J=1 To YKPL
  262. {9    If SOLUT0(I,J)=SOLUT1(I,J) : Add SAMOJA,1 : End If 
  263. {9    SOLUT0(I,J)=SOLUT1(I,J) : SOLUT1(I,J)=0
  264. {9  Next : Next 
  265. {9Until SAMOJA=XKPL*YKPL
  266. {9Locate 0,29 : Print "Elämä jumittui."
  267. {9End 
  268. {9Rem aliohjema solun piirtoon 
  269. {9999
  270. {9A0#=Int(X0#+I*LX#+1.5)
  271. {9B0#=Int(Y0#+J*LY#+1.5)
  272. {9A1#=Int(X0#+I*LX#+LX#-0.5)
  273. {9B1#=Int(Y0#+J*LY#+LY#-0.5)
  274. {9If Int(A0#)=Int(A1#) or Int(B0#)=Int(B1#)
  275. {9    Plot A0#,B0# : Draw To A1#,B1#
  276. {9Else Bar A0#,B0# To A1#,B1# : End If 
  277. {9Return 
  278.  
  279.  
  280. {7 Seuraavalla kahdella sivulla on ohjelman tuottamat kuvat.
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.